package br.com.fip.sis.dao;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import br.com.fip.sis.model.Grupo;
import br.com.fip.sis.util.Log;

public class GrupoDAO {

	private Session session;

	public void inserirGrupo(Grupo grupo, Session session) {
		this.session = session;
		try {
			this.session.beginTransaction();
			this.session.save(grupo);
			this.session.getTransaction().commit();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
			Log.getLogger().error(e);
		}
	}

	public void alterarGrupo(Grupo grupo, Session session) {
		this.session = session;
		try {
			this.session.beginTransaction();
			this.session.merge(grupo);
			this.session.getTransaction().commit();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
			Log.getLogger().error(e);
		}
	}

	public void excluirGrupo(Grupo grupo, Session session) {
		this.session = session;
		try {
			this.session.beginTransaction();
			this.session.delete(grupo);
			this.session.getTransaction().commit();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
			Log.getLogger().error(e);
		}
	}

	@SuppressWarnings("unchecked")
	public List<Grupo> listarGrupo(Session session) {
		this.session = session;
		try {
			Criteria criteria = this.session.createCriteria(Grupo.class);
			return criteria.list();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
			Log.getLogger().error(e);
		}

		return null;
	}

	public Grupo buscarGrupoID(long id, Session session) {
		Grupo grupo = null;
		this.session = session;
		try {
			Criteria criteria = this.session.createCriteria(Grupo.class);
			criteria.add(Restrictions.eq("id", id));
			grupo = (Grupo) criteria.uniqueResult();
			return grupo;
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
			Log.getLogger().error(e);
		}

		return null;
	}

}
